package com.deng.maintenance.dao.impl;

import java.util.ArrayList;
import java.util.List;

//import bsh.EvalError;
//import bsh.Interpreter;

import com.deng.common.vo.DutyTypeVo;
import com.deng.maintenance.dao.IKPISetting;
import com.deng.maintenance.data.MaintenanceData;
import com.deng.maintenance.vo.KPI_DicVO;
import com.deng.maintenance.vo.Stat_OrgVO;

public class KPTSettingImpl implements IKPISetting {

	public List<Stat_OrgVO> searchSataOrg(String newCode) {
		// TODO Auto-generated method stub
		System.out.println("-------------KPTSettingImpl.searchSataOrg--------------------------");
		MaintenanceData da=new MaintenanceData();
		return da.searchSataOrg(newCode,"1");
	}
	
	public List<DutyTypeVo> searchDutyType(int id) {
		MaintenanceData da=new MaintenanceData();
		return da.searchDutyType(id);
	}
	public List initKPISettingView(){
		List ret=new ArrayList();
		
		ret.add(searchSataOrg(null));
		ret.add(searchDutyType(-1));
		return ret;
	}
	
	
	
	public List<KPI_DicVO> searchKpi_Dic(int kpi_id ,String dep_id) {
		System.out.println("-------------KPTSettingImpl.searchKpi_Dic--------------------------");
		MaintenanceData da=new MaintenanceData();
		return da.searchKpi_Dic(kpi_id, dep_id);
	}
	
	public String count(int kpi_id,String in_value){
		System.out.println("-------------KPTSettingImpl.count--------------------------"+kpi_id+";"+in_value);
		String ret="";
		if("".equals(in_value)||in_value==null){
			return ret;
		}
		try{
			MaintenanceData da=new MaintenanceData();
			List<KPI_DicVO> list=da.searchKpi_Dic(Integer.valueOf(kpi_id), null);
			if(list!=null&&list.size()>0){
				KPI_DicVO vo=list.get(0);
				ret=count(Double.valueOf(in_value), Double.valueOf(vo.getWeight()), vo.getExpression(),vo.getTarget_value(),vo.getTarget_value_max());
			}
			
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		return ret;
	}
	
	
	public String count(double in_value,double weight,String exp,String target_value,String target_value_max){
//		System.out.println("-------------KPTSettingImpl.count--------------------------");
//		String ret="";
//		Interpreter interpreter = new Interpreter();
//		exp=replaceExp(exp, in_value);
//		try {
//			if(exp==null||"".equals(exp)){
//				throw new Exception("error exp");
//			}
//			
//			if(target_value_max!=null&&!"".equals(target_value_max)){
//				
//				double tv=Double.valueOf(target_value);
//				double tv_max=Double.valueOf(target_value_max);
//				if(in_value<tv_max){
//					exp=exp.substring(0, exp.indexOf("or"));
//				}
//				else{
//					exp=exp.substring(exp.indexOf("or")+2);
//				}
//				
//			}
//			
//			
//			
//			interpreter.set("float", interpreter.eval("(" + exp +")"));
//			float fl=Float.valueOf(interpreter.get("float")+"");
//			if(fl>100){
//				fl=100;
//			}
//			if(fl<0.00001){
//				fl=0;
//			}
//			ret=fl*weight/100+"";
//			System.out.println(ret);
//		} catch (EvalError e) {
//			ret="表达式错误";
//			e.printStackTrace();
//			try {
//				throw new Exception("表达式错误");
//			} catch (Exception e1) {
//				// TODO Auto-generated catch block
//				e1.printStackTrace();
//			}
//			
//		}
//		catch(Exception e){
//			ret="表达式错误";
//			e.printStackTrace();
//			try {
//				throw new Exception("表达式错误");
//			} catch (Exception e1) {
//				// TODO Auto-generated catch block
//				e1.printStackTrace();
//			}
//		}
//		
//		return ret;
		
		return null;
	}
	
	public String replaceExp(String exp,double in_value){
		exp=exp.replaceAll("＋", "+");
		exp=exp.replaceAll("－", "-");
		exp=exp.replaceAll("×", "*");
		exp=exp.replaceAll("÷", "/");
		exp=exp.replaceAll("X", "("+in_value+")");
		exp=exp.replaceAll("x", "("+in_value+")");
		return exp;
	}
	
	public String saveKpi_Dic(KPI_DicVO vo){
		System.out.println("-------------KPTSettingImpl.saveKpi_Dic--------------------------");
		String ret="succeed";
		MaintenanceData da=new MaintenanceData();
		if(vo!=null){
			if(vo.getExpression()!=null){
				try{
					String tmp=count(10,Double.valueOf(vo.getWeight()),vo.getExpression(),vo.getTarget_value(),vo.getTarget_value_max());
					System.out.println("tmp===="+tmp);
					if("表达式错误".equals(tmp)){
						ret="保存失败，表达式错误！";
						return ret;
					}
				}
				catch(Exception ex){
					ret="保存失败，表达式错误！";
					ex.printStackTrace();
					return ret;
				}
			}
			if(vo.kpi_id==0){
				System.out.println("-------------new--------------------------");
				ret=da.insertKpi_Dic(vo);
			}
			else{
				System.out.println("-------------update--------------------------");
				ret=da.updateKpi_Dic(vo);
			}
		}
		return ret;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		KPTSettingImpl kpt=new KPTSettingImpl();
		//System.out.println(kpt.count(0.8d,15d,"100-(1-X)/0.01*5"));
		
		
	}

}
